package de.mnit.basis.daten.struktur.schluessel.topf;

import de.mnit.basis.daten.struktur.S_Folge;
import de.mnit.basis.daten.struktur.gruppe.Gruppe2;
import de.mnit.basis.daten.struktur.liste.S_Liste;
import de.mnit.basis.daten.struktur.menge.S_Menge;
import de.mnit.basis.daten.struktur.ordnen.S_Sortierbar;



/**
 * @author Michael Nitsche
 */
public interface S_SchluesselTopf_Basis<TA,TB> extends S_Sortierbar<Gruppe2<TA,S_Folge<TB>>>, Iterable<Gruppe2<TA,S_Folge<TB>>> {

	S_Folge<TB>	gib(TA schluessel);
	S_Menge<TA>	gSchluessel();
	boolean		istLeer();

	void		plus(TA schluessel, TB objekt);
	void		plusAlle(TA schluessel, Iterable<TB> objekte);
	void		minus(TA schluessel); //return TB?
	S_Liste<TB>	minusAlle(TA schluessel);
	TB			minus(TA schluessel, TB objekt);
//	TB			ersetzen(TA schluessel, TB neu);
//	TB			setze(TA schluessel, TB neu);

	S_SchluesselTopf_Basis<TA,TB>	_plusAlle(TA schluessel, TB... objekt); //TODO zu plusAlle
	S_SchluesselTopf_Basis<TA, TB>	kopie();

}
